package virtdriver

import (
	"gluenet/internal/agent/depend"
	"gluenet/internal/agent/driver/virtdriver/kubevirt"
	"gluenet/internal/agent/driver/virtdriver/options"
)

type VirtDriver interface {
	StartVMI(virtualMachineInstanceName string, opts options.StartVmiOptions) error

	StopVMI(virtualMachineInstanceName string, opts options.StopVmiOptions) error

	ExposeVM(virtualMachineName string, opts options.ExposeVmiOptions) error

	ExposeVMI(virtualMachineInstanceName string, opts options.ExposeVmiOptions) error

	ExposeVMIs(virtualMachineInstanceReplicasetName string, opts options.ExposeVmiOptions) error
}

func init() {
	depend.Provide(NewVirtDriver)
}

func NewVirtDriver() (VirtDriver, error) {
	return kubevirt.NewKubevirtDirver()
}
